<?php

namespace Sbm;

class RegionSearch extends ObjectSearch
{

	function GetDefaultFilters()
	{
		return array(
			'select' => "`region`.*",
			'from' => "`{region}` as `region`",
		);
	}

	/**
	 * Возврaщает список регионов в порядке $order_by, с $start по $start+$offset записи
	 * 
	 * @param string $order_by
	 * @param int $start
	 * @param int $offset
	 * @return array
	 */
	function GetList( $order_by, $start, $offset = 50 )
	{
		return $this->GetByFilters(array(
					'orderby' => $order_by,
					'limit' => $start . ',' . $offset,
				));
	}

	/**
	 * Возвращает список Region по массиву $master_ids
	 * В результате возвращается массив array(master_id1=>array(Region1,Region2,...), master_id2=>array(Region2,...),...)
	 *   
	 * @param $master_ids
	 * @return array of array
	 */
	function GetByMasters( $master_ids )
	{
		foreach ($master_ids as $v)
		{
			$result[$v] = array();
		}
		$s = "SELECT 
		             `ink`.`master_id`,
		             `region`.* 
		      FROM 
		             `{master_region}` as `ink` LEFT JOIN
		             `{region}` as `region` ON `ink`.`region_id` = `region`.`id`
		      WHERE 
		             `ink`.`master_id` IN ('" . implode("','", $master_ids) . "')";
		$q = $this->db->Query($s);
		$z = array();
		while ($r = $q->FetchRow())
		{
			$pid = $r['id'];
			$master_id = $r['master_id'];
			if ( !isset($z[$pid]) )
			{
				$z[$pid] = new Region(array(
							'id' => $r['id'],
							'title' => $r['title']
						));
			}
			$result[$master_id][] = $z[$pid];
		}
		return $result;
	}

	/**
	 * Возвращает список объектов Region по имени оборудования
	 * @param string $name
	 * @return array
	 */
	function GetByName( $name )
	{
		return $this->GetByFilters(array(
					'where' => "`region`.`title` = '" . $this->db->Escape($name) . "'",
				));
	}

	protected function CreateOneItem( $r )
	{
		return new Region($r);
	}

}